/**
 * 描述：钉钉嵌入内部公共模型定义
 * 公司：xxx有限公司
 * 版权：xxx2020
 * 作者：oyjl
 * 时间：2020-04-26 09:51:36
 */

/**
 * 描述：公共列表定义
 * 作者：oyjl
 * 时间：2020-04-26 09:52:24
 */
export class CommonList {
  public list: List;
  constructor(data: List) {
    this.list = data;
  }
}

/**
 * 描述：列表接口
 * 作者：oyjl
 * 时间：2020-04-26 09:52:46
 */
export interface List {
  head: string; // 列表页头部展示文本
  headStyle?: object; // 列表页头部展示文本样式
  tabConfig: Array<TabConfig>; // tab配置数组
}

/**
 * 描述：Tab页接口
 * 作者：oyjl
 * 时间：2020-04-26 09:52:59
 */
export interface TabConfig {
  head: string; // tab标题
  headStyle?: object; // tab标题样式
  isRequest: boolean; // 是否下发请求,如果为false则不下发请求，为true才下发请求
  url: string; // tab下发请求url
  listConfig: ListConfig; // tab页内列表模块内内容展示字段
  req?: any; // tab默认传递的查询参数
  data?: any; // 传递的静态数据
  jumpUrl: string; // 跳转的url地址
  resKey?: string; // 获取后端传递具体值，例如a{b: data},即获取a.b下的值
}

/**
 * 描述：Tab页内部列表展示内容配置
 * 作者：oyjl
 * 时间：2020-04-26 09:53:19
 */
export interface ListConfig {
  id: string; // 该模块唯一ID标识
  head: ListHead; // 模块头部配置
  headStyle?: object; // 模块头部配置样式
  fields: Array<ListField>; // 模块主要展示内容数组
}

/**
 * 描述：列表页头部配置
 * 作者：oyjl
 * 时间：2020-04-26 09:53:45
 */
export interface ListHead {
  text: string; // 订单展示文本
  orderNum: string; // 单号展示字段
  status: string; // 右侧状态字段
  dict?: string; // 字典类型Key值
  textStyle?: object; // 订单展示文本样式
  orderNumStyle?: object; // 单号展示字段样式
  statusStyle?: object; // 右侧状态字段样式
}

/**
 * 描述：列表页主体内容配置
 * 作者：oyjl
 * 时间：2020-04-26 09:56:26
 */
export interface ListField {
  text: string; // 列表展示文本
  field: string; // 列表展示字段,如果字段为code，则必须传递dict来转换成正确的字典文本内容
  dictKey?: string; // 设置字段转换管道key,可选值dict(系统字典转换)，currency(货币)，date(时间)
  dict?: string; // 字典类型Key值
  textStyle?: object; // 文本样式
  fieldStyle?: object; // 字段样式
}

/**
 * 描述：公共详情定义
 * 作者：oyjl
 * 时间：2020-04-26 09:57:19
 */
export class CommonDetail {
  public detail: Detail;
  constructor(data: Detail) {
    this.detail = data;
  }
}

/**
 * 描述：详情页配置
 * 作者：oyjl
 * 时间：2020-04-26 09:57:41
 */

export interface Detail {
  id: string; // 查询参数唯一ID映射字段
  head: string; // 列表页头部展示文本
  headStyle?: object; // 列表页头部展示文本样式
  moduleHead: DetailHead; // 模块头部配置
  modules: Array<FieldModule>; // 模块主要展示内容数组
  url?: string; // 模块样式
  req?: any; // 默认传递的查询参数
  buttons?: Array<DetailButton>; // 按钮组
  resKey?: string; // 获取后端传递具体值，例如a{b: data},即获取a.b下的值
}

/**
 * 描述：详情页头部配置
 * 作者：oyjl
 * 时间：2020-04-26 09:53:45
 */
export interface DetailHead {
  text: string; // 订单展示文本
  orderNum: string; // 单号展示字段
  status: string; // 右侧状态字段
  dict: string; // 字典类型Key值
  textStyle?: object; // 订单展示文本样式
  orderNumStyle?: object; // 单号展示字段样式
  statusStyle?: object; // 右侧状态字段样式
}

/**
 * 描述：详情页主体内容配置
 * 作者：oyjl
 * 时间：2020-04-26 09:56:26
 */
export interface FieldModule {
  head: string; // 模块文本
  headTotal?: Array<HeadTotal>; // 顶部合计字段样式
  headStyle?: object; // 模块文本样式
  type: string; // text文本，table表格
  isRequest: boolean; // 是否单独发送请求
  url?: string; // 模块样式
  req?: any; // 默认传递的查询参数
  fields: Array<DetailField>; // 列表展示字段,如果字段为code，则必须传递dict来转换成正确的字典文本内容
  data?: any; // 传递的静态数据
  jumpText?: string; // 跳转的text文本提示
  jumpUrl?: string; // 跳转的url地址与jumpText共同控制，只有2者都存在的时候才会执行跳转
  isIndex?: boolean; // 是否显示行号
  isFind?: boolean; // 是否显示查询按钮
  resKey?: string; // 获取后端传递具体值，例如a{b: data},即获取a.b下的值
  id?: string; // 唯一标识字段
}

export interface HeadTotal {
  text: string; // 文本
  fields: Array<string>; // 字段数组
  style?: object; // 样式
  dictKey?: string; // 设置字段转换管道key,可选值dict(系统字典转换)，currency(货币)，date(时间)
  dict?: string; // 字典类型Key值
}

/**
 * 描述：详情页主体内容配置
 * 作者：oyjl
 * 时间：2020-04-26 09:56:26
 */
export interface DetailField {
  text: string; // 列表展示文本
  field: string; // 列表展示字段,如果字段为code，则必须传递dict来转换成正确的字典文本内容
  dictKey?: string; // 设置字段转换管道key,可选值dict(系统字典转换)，currency(货币)，date(时间)
  dict?: string; // 字典类型Key值
  textStyle?: object; // 文本样式
  fieldStyle?: object; // 字段样式
}

/**
 * 描述：详情按钮组配置
 * 作者：oyjl
 * 时间：2020-04-27 12:28:34
 */
export interface DetailButton {
  text: string; // 按钮文本
  style?: object; // 按钮样式
  dialog?: Dialog; // 按钮绑定的弹框
}
/**
 * 描述：公共提示框
 * 作者：oyjl
 * 时间：2020-04-26 11:25:57
 */
export class CommonDialog {
  public dialog: Dialog;
  constructor(data: Dialog) {
    this.dialog = data;
  }
}

/**
 * 描述：提示框内容配置
 * 作者：oyjl
 * 时间：2020-04-26 11:26:15
 */

export interface Dialog {
  head: string; // 弹框顶部文本
  headStyle?: object; // 头部文本样式
  text: string; // 弹框字段提示文本
  textStyle?: object; // 字段提示文本样式
  required: boolean; // 是否必填项
  callback?: (...argv) => void; // 确定按钮控制回调,传递当前配置
}
